5.06. Ключевые слова в C++
Ключевые слова в C++
Управляющие конструкции
| Ключевое слово | Назначение | Пример |
|---|---|---|
if | Условное выполнение кода при истинности выражения | if (x > 0) process(x); |
else | Альтернативная ветка для if при ложности условия | if (ok) success(); else fail(); |
switch | Множественный выбор на основе целочисленного выражения | switch (code) { case 1: handle(); break; } |
case | Метка варианта внутри switch | case HTTP_OK: return true; |
default | Метка варианта по умолчанию в switch | default: log_error(); break; |
break | Прерывание выполнения цикла или switch | for (;;) { if (done) break; } |
continue | Переход к следующей итерации цикла | for (auto v : items) { if (skip(v)) continue; process(v); } |
do | Начало цикла с постусловием | do { read(); } while (!eof); |
while | Цикл с предусловием или завершение цикла do | while (ptr) { ptr = ptr->next; } |
for | Цикл с инициализацией, условием и шагом | for (int i = 0; i < n; ++i) sum += arr[i]; |
goto | Безусловный переход к метке в функции | if (err) goto cleanup; |
Типы данных
| Ключевое слово | Назначение | Пример |
|---|---|---|
bool | Логический тип со значениями true и false | bool active = true; |
char | Целочисленный тип для представления символов | char c = 'A'; |
char8_t | Тип для 8-битных UTF-8 символов (C++20) | char8_t utf8 = u8'ы'; |
char16_t | Тип для 16-битных UTF-16 символов (C++11) | char16_t utf16 = u'ы'; |
char32_t | Тип для 32-битных UTF-32 символов (C++11) | char32_t utf32 = U'ы'; |
wchar_t | Расширенный символьный тип, размер зависит от платформы | wchar_t wc = L'Ω'; |
short | Короткое целое число | short count = 100; |
int | Целое число базового размера | int value = 42; |
long | Длинное целое число | long id = 123456789L; |
long long | Очень длинное целое число (C++11) | long long big = 9223372036854775807LL; |
signed | Явное указание знакового представления целого | signed char delta = -5; |
unsigned | Беззнаковое целое число | unsigned int size = 100u; |
float | Число с плавающей точкой одинарной точности | float pi = 3.14159f; |
double | Число с плавающей точкой двойной точности | double precise = 3.1415926535; |
long double | Число с плавающей точкой расширенной точности | long double extended = 3.141592653589793238L; |
void | Отсутствие типа; используется для указателей или функций без возврата | void* ptr = malloc(100); |
nullptr | Константа нулевого указателя (C++11) | int* p = nullptr; |
auto | Автоматический вывод типа переменной (C++11) | auto iter = container.begin(); |
decltype | Получение типа выражения (C++11) | decltype(x + y) result = x + y; |
Модификаторы и спецификаторы
| Ключевое слово | Назначение | Пример |
|---|---|---|
const | Объявление неизменяемого объекта или указателя | const int MAX = 100; |
constexpr | Вычисление значения во время компиляции (C++11) | constexpr int square(int x) { return x * x; } |
consteval | Функция, обязательная для вычисления во время компиляции (C++20) | consteval int id(int x) { return x; } |
constinit | Гарантированная инициализация во время компиляции (C++20) | constinit int global = 42; |
volatile | Указание на возможное изменение объекта извне программы | volatile bool flag; |
mutable | Разрешение изменения члена класса в константном методе | mutable std::mutex mtx; |
static | Статическая длительность хранения или принадлежность к классу | static int counter = 0; |
thread_local | Хранение отдельной копии переменной для каждого потока (C++11) | thread_local int per_thread_id; |
extern | Связывание объекта или функции с внешней единицей трансляции | extern int global_var; |
register | Устаревшее; рекомендация разместить переменную в регистре | register int i; // игнорируется современными компиляторами |
alignas | Указание выравнивания объекта (C++11) | alignas(16) float vec[4]; |
alignof | Получение требуемого выравнивания типа (C++11) | size_t a = alignof(double); |
sizeof | Определение размера типа или объекта в байтах | size_t s = sizeof(int); |
noexcept | Спецификатор отсутствия исключений у функции (C++11) | void cleanup() noexcept; |
inline | Рекомендация встраивания функции или определения в заголовке | inline int add(int a, int b) { return a + b; } |
Приведение типов
| Ключевое слово | Назначение | Пример |
|---|---|---|
static_cast | Статическое приведение между связанными типами | double d = static_cast<double>(i); |
dynamic_cast | Безопасное приведение в иерархии наследования с проверкой во время выполнения | Derived* d = dynamic_cast<Derived*>(base_ptr); |
const_cast | Добавление или снятие квалификатора const | const_cast<char*>(str)[0] = 'X'; |
reinterpret_cast | Низкоуровневое приведение между несвязанными типами | int* p = reinterpret_cast<int*>(buffer); |
Обработка исключений
| Ключевое слово | Назначение | Пример |
|---|---|---|
try | Блок кода, в котором может возникнуть исключение | try { risky_operation(); } |
catch | Обработчик исключения после блока try | catch (const std::exception& e) { log(e.what()); } |
throw | Генерация исключения | throw std::runtime_error("invalid state"); |
noexcept | Спецификатор отсутствия исключений (повторно для полноты) | ~MyClass() noexcept; |
Объектно-ориентированное программирование
| Ключевое слово | Назначение | Пример |
|---|---|---|
class | Объявление пользовательского типа с инкапсуляцией | class Widget { public: void draw(); }; |
struct | Объявление пользовательского типа с открытыми членами по умолчанию | struct Point { int x; int y; }; |
union | Тип с общим участком памяти для нескольких полей | union Data { int i; float f; char str[20]; }; |
enum | Объявление перечислимого типа | enum Color { Red, Green, Blue }; |
public | Спецификатор доступа: открытый интерфейс | class X { public: int value; }; |
protected | Спецификатор доступа: доступен наследникам | class Base { protected: void helper(); }; |
private | Спецификатор доступа: закрытый интерфейс | class Secret { private: int key; }; |
friend | Предоставление доступа к закрытым членам внешней сущности | friend class Debugger; |
virtual | Объявление виртуальной функции для полиморфизма | virtual void render() = 0; |
override | Контекстное ключевое слово: подтверждение переопределения виртуальной функции (C++11) | void render() override; |
final | Контекстное ключевое слово: запрет дальнейшего наследования класса или переопределения функции (C++11) | class Leaf final { }; |
this | Указатель на текущий объект внутри метода | return this->value; |
explicit | Запрет неявных преобразований конструктора | explicit Vector(int size); |
Шаблоны и обобщённое программирование
| Ключевое слово | Назначение | Пример |
|---|---|---|
template | Объявление шаблона класса или функции | template<typename T> T min(T a, T b); |
typename | Указание зависимого типа в шаблоне или псевдоним для class | template<typename T> class List; |
concept | Ограничение шаблонных параметров набором требований (C++20) | concept Integral = std::is_integral_v<T>; |
requires | Спецификация требований к шаблонным параметрам (C++20) | template<typename T> requires Integral<T> void f(T x); |
Корутины (C++20)
| Ключевое слово | Назначение | Пример |
|---|---|---|
co_await | Приостановка корутины до завершения асинхронной операции | auto result = co_await fetch_data(); |
co_yield | Возврат промежуточного значения из корутины-генератора | co_yield value; |
co_return | Завершение корутины с возвратом результата | co_return final_value; |
Устаревшие и редко используемые ключевые слова
| Ключевое слово | Назначение | Пример |
|---|---|---|
auto (до C++11) | Автоматическая длительность хранения (устарело, значение изменено в C++11) | auto int x = 5; // устаревший синтаксис |
export | Экспорт шаблонов (не поддерживается большинством компиляторов) | export template<typename T> class X; |
register | Рекомендация размещения переменной в регистре процессора | register int counter; |
Зарезервированные идентификаторы для будущего использования
| Ключевое слово | Назначение | Пример |
|---|---|---|
char8_t | Тип для хранения UTF-8 кодовых единиц (C++20) | char8_t utf8_str[] = u8"текст"; |
concept | Определение ограничений для шаблонных параметров (C++20) | concept Signed = std::is_signed_v<T>; |
consteval | Функция, вычисляемая исключительно во время компиляции (C++20) | consteval int factorial(int n) { return n <= 1 ? 1 : n * factorial(n-1); } |
constinit | Гарантированная инициализация статического объекта во время компиляции (C++20) | constinit thread_local int id = generate_id(); |
co_await | Ожидание завершения асинхронной операции в корутине (C++20) | auto data = co_await fetch_async(url); |
co_yield | Возврат промежуточного значения из корутины-генератора (C++20) | co_yield current_value; |
co_return | Завершение корутины с возвратом результата (C++20) | co_return final_result; |
requires | Спецификация требований к шаблонным параметрам (C++20) | template<typename T> requires std::integral<T> void f(T x); |
import | Импорт модуля (C++20) | import std.core; |
module | Объявление модуля (C++20) | module my_component; |
Специальные литералы
| Ключевое слово | Назначение | Пример |
|---|---|---|
nullptr | Константа нулевого указателя | int* ptr = nullptr; |
true | Логическая константа истины | bool active = true; |
false | Логическая константа лжи | bool empty = false; |
Прочие ключевые слова
| Ключевое слово | Назначение | Пример |
|---|---|---|
namespace | Пространство имён для группировки имен | namespace math { double pi = 3.14159; } |
using | Введение псевдонима типа или импорт имени из пространства имён | using IntPtr = int*; |
operator | Перегрузка оператора или объявление функции-оператора | Complex operator+(const Complex& a, const Complex& b); |
new | Динамическое выделение памяти | int* p = new int[100]; |
delete | Освобождение памяти, выделенной через new | delete[] p; |
typeid | Получение информации о типе во время выполнения | const type_info& ti = typeid(obj); |
true | Логическая константа истины | bool flag = true; |
false | Логическая константа лжи | bool empty = false; |
and | Альтернативное написание оператора && (из заголовка <iso646.h>) | if (ready and valid) proceed(); |
or | Альтернативное написание оператора ` | |
not | Альтернативное написание оператора ! | if (not found) return; |
xor | Альтернативное написание оператора ^ | bool diff = (a xor b); |
asm | Встраивание ассемблерного кода (зависит от компилятора) | asm("nop"); |
export | Устаревшее; использовалось для экспорта шаблонов (не поддерживается) | export template<typename T> class X; // игнорируется |
import | Импорт модуля (C++20) | import std; |
module | Объявление модуля (C++20) | module mylib; |